import Vue from 'vue'
import App from './App.vue'
import vuetify from './plugins/vuetify'
import router from './router'
import axios from 'axios'
import userManager from './oidc'

Vue.config.productionTip = false
// 将 Axios 实例挂载到 Vue 原型上，这样在组件中就可以通过 this.$http 使用 Axios

// const oidcConfig = {
//   authority: 'https://localhost:44301',
//   client_id: 'public-website-client',
//   redirect_uri: 'http://localhost:8080/callback',
//   response_type: 'code',
//   scope: 'openid profile',
// };
// const userManager = new Oidc.UserManager(oidcConfig);

const refreshToken = async function () {
  try {
    const user = await userManager.getUser();
    if (user && user.expired) {
      const newToken = await userManager.signinSilent();
      // 使用新的 access token 调用 API 或者更新用户界面
      console.log('获取到新的 access token:', newToken);
    }
  } catch (error) {
    console.error('处理过期的 access token 失败:', error);
  }
}

axios.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token');
    if (token) {
      // 在发送请求之前做些什么，比如设置请求头
      config.headers['Authorization'] = `Bearer ${token}`; // 设置 Authorization 头
    } else {
      // userManager.getUser().then(user => {
      //   if (user) {
      //     console.log('user', user)
      //   } else {
      //     // 用户未登录，执行登录逻辑
      //     userManager.signinRedirect();

      //   }
      // });
    }

    return config;
  },
  error => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);
axios.interceptors.response.use(
  response => {
    return response.data;
  },
  async error => {
    const originalRequest = error.config;
    if (error.response.status === 401 && !originalRequest._retry) {
      originalRequest._retry = true

      await refreshToken();

      return axios(originalRequest);
    }

    // const originalRequest = error.config;
    // if (error.response.status === 401 && !originalRequest._retry) {
    //   originalRequest._retry = true
    //   const refresh_token = localStorage.getItem('refresh_token')
    //   const body = {
    //     'grant_type': 'refresh_token',
    //     'client_id': 'console-client-demo',
    //     'client_secret': '1q2w3e*',
    //     'refresh_token': refresh_token
    //   };
    //   return axios.post(`/connect/token`, qs.stringify(body)).then(r => {
    //     if (r) {
    //       utils.setTokenInfo(r.access_token, r.refresh_token)
    //       // 更新原始请求的 Authorization 头部
    //       originalRequest.headers.Authorization = `Bearer ${r.access_token}`;
    //       // 重新发送原始请求
    //       return axios(originalRequest);
    //     } else {
    //       //跳转到登录页
    //     }
    //   }).catch(refreshError => {
    //     return Promise.reject(refreshError);
    //   })
    // }

    return Promise.reject(error);
  }
)
Vue.prototype.$http = axios

new Vue({
  router,
  vuetify,
  render: h => h(App)
}).$mount('#app')
